<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>


<script>
// 使用 构造函数 创建对象
// 当一个函数使用new运算符调用，并用于创建某一类对象时，该函数就叫构造函数
// 构造函数通常首字母大写
// 在构造函数内部给this添加属性方法，this指向创建出来的实例对象
// 内置构造函数：Number  String  Object ...

function Human(n,s){
    // this -> 实例对象
    this.name = n;
    this.sex = s;
    this.say = function (){
        console.log( 'hi' );
    }
}

// 构造函数也相当于是一个工厂函数
function Dog(n,s){
    // var this = {}; 自动完成
    // this -> 实例对象
    this.name = n;
    this.sex = s;
    this.say = function (){
        console.log( '汪汪' );
    }
    // return this; 自动完成
}

var person1 = new Human('张三','男');
var person2 = new Human('李四','女');
var dog1 = new Dog('大黄','公');
console.log( person1.constructor );// Human
console.log( person2.constructor );// Human
console.log( dog1.constructor );// Dog
console.log( person1.say === person2.say );// false

// 问题1：如果需要大批量创建对象，需要写大量重复的代码--已解决
// 问题2：无法区分对象的类型（分类：人类和狗类）--已解决
// 问题3：相同类型对象的相同方法，重复创建了（代码重复，占用更多内存）

</script>
</body>
</html>